-- ------------------------------------------
-- CargarDinero
-- Se carga dinero a un cliente.
-- ------------------------------------------

CREATE OR REPLACE FUNCTION CargarDinero(param_idUsuario usuarios.idUsuario%TYPE, param_monto cargas.monto%TYPE)
RETURNS void AS $$

        DECLARE
                usuario usuarios%ROWTYPE;

	BEGIN
                -- Tomar ese usuario
                SELECT INTO usuario * FROM usuarios WHERE idUsuario = param_idUsuario;

		-- Excepciones
                IF (usuario IS NULL) THEN
                    RAISE EXCEPTION 'El usuario no existe';
                END IF;

                IF (param_monto IS NULL OR param_monto <= 0) THEN
                    RAISE EXCEPTION 'Ese monto no tiene sentido';
                END IF;

                -- Realizar carga
                INSERT INTO cargas (idUsuario      , monto      , fecha)
                            VALUES (param_idUsuario, param_monto, CURRENT_DATE);

                -- Realizar update de saldo
               UPDATE usuarios SET saldo = (usuario.saldo + param_monto) WHERE idUsuario = param_idUsuario;

	END;

$$ LANGUAGE plpgsql